elem.onclick = function (event) {}
程序this指向是dom元素本身

obj.addEventListener(type,fn,false)
this指向dom元素本身

IE用法
obj.attachEvent('on' + function,fn)
程序this指向window

<!DOCTYPE html>
<html>
<head>
	<title></title>
</head>
<body>
	<div></div>

	<script type="text/javascript">
		var div = document.getElementsByTagName('div')[0];
		div.onclick = function(){//兼容性好
			console.log(this);
		}

		div.addEventListener('onclick',function(){
			console.log(this);
		},false)

		div.attachEvent('onclick', function(){//IE使用
			console.log(this);//指向window
			handle.call(div);//改变this指向
		});

		function handle(){
			//事件处理程序
		}
	</script>
</body>
</html>

封装addEvent处理不同兼容性的方法 
<script type="text/javascript">
	function addEvent(elem,type,handle){//给一个dom对象添加该事件类型的处理函数;对象，对象类型，事件处理函数
		if(elem.addEventListener){
			elem.addEventListener(type, handle, false);
		}else if(elem.attachEvent){
			elem.attachEvent('on' + type, function(){
				handle.call(elem);
			})
		}else{
			elem['on' + type] = handle;//onclick
		}
	}
</script>

<script type="text/javascript">
	//解除事件绑定
	var div = document.getElementsByTagName('div')[0];
	div.onclick = function(){
		console.log('a');
		div.onclick = null;//点击只执行一次后解除绑定
	}

	div.addEventListener('click', function(){//绑定的是一个对象的特定事件类型的特定处理函数
		console.log('v');
	}, false);//匿名函数引用唯一

	div.removeEventListener('click',,false);//解除对应，对象，事件类型对应，处理函数是同一个,匿名函数清除不了

	div.addEventListener('click', test, false);
	function test(){}
	div.removeEventListener('click',test, false);

	div.detachEvent('on' + type, fn);
</script>